/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;

import com.comac.ins.isfd.domain.IsfdLargeFile;
import com.comac.ins.isfd.domain.IsfdMeshOp2Collect;
import com.comac.ins.isfd.domain.bo.IsfdLargeFileBo;
import com.comac.ins.isfd.domain.chunks.ChunksCheckResultVo;
import com.comac.ins.isfd.domain.chunks.ChunksUploadResultVo;
import com.comac.ins.isfd.domain.vo.IsfdLargeFileVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 要素数据大文件Service接口
 *
 * @author hxloongs
 * @date 2025-03-25
 */
public interface IIsfdLargeFileService {

    /**
     * 查询要素数据大文件
     *
     * @param uploadId 主键
     * @return 要素数据大文件
     */
    IsfdLargeFileVo queryById(String uploadId);

    /**
     * 保存
     */
    void save(IsfdLargeFileBo isfdLargeFileBo);

    /**
     * 查询符合条件的要素数据大文件列表
     *
     * @param bo 查询条件
     * @return 要素数据大文件列表
     */
    List<IsfdLargeFileVo> queryList(IsfdLargeFileBo bo);


    IsfdLargeFile queryByByFileHash(String fileHash);

    /**
     * 分片上传-初始化接口
     */
    ChunksUploadResultVo chunksUploadInit(IsfdLargeFileBo isfdLargeFileBo);

    /**
     * 分片上传-分片上传接口
     */
    ChunksUploadResultVo chunksUpload(MultipartFile file,
                                      String uploadId,
                                      String fileHash,
                                      Integer chunkIndex,
                                      Integer chunkSize) throws IOException;

    /**
     * 上传时
     * 自然网格结果库落库
     */
    void meshOp2InsertByUpload(IsfdLargeFile isfdLargeFile, String uploadId);


    /**
     * 无上传时，直接新增
     * 自然网格结果库落库
     */
    void meshOp2Insert(IsfdMeshOp2Collect isfdMeshOp2Collect, IsfdLargeFile isfdLargeFile);

    /**
     * 分片上传-查询进度
     */
    ChunksCheckResultVo chunksUploadCheck(String uploadId, String fileHash);


    /**
     * 重新上传
     */
    ChunksUploadResultVo reUpload(IsfdLargeFileBo isfdLargeFileBo);

    /**
     * 删除文件（测试使用）
     */
    Void deleteLargeFile(String fileHash);


}
